// ===========================
// 19.9 Policy特征
// ===========================
Policy特征(策略特征)是一种特殊类型的特征，它不仅提供类型信息，还定义了如何处理这些类型的策略。《C++ Templates》第19章的19.9节详细介绍了这种强大的模板元编程技术。

// =================================================
// 19.9.1 只读的参数类型(Read-Only Parameter Types)
// =================================================
只读参数类型策略特征用于确定函数参数的最佳传递方式，以实现高效且安全的参数传递。

1.基本原理
1)对于函数参数，我们通常有几种传递方式: 
2)值传递(by value)
3)常量引用传递(by const reference)
4)非常量引用传递(by non-const reference)

选择哪种方式取决于类型的特性和使用场景。

2.实现方式
// 主模板 - 默认使用const引用传递
template<typename T>
struct RParam {
    using Type = const T&;
};

// 对于小型内置类型，使用值传递
template<>
struct RParam<int> {
    using Type = int;
};

template<>
struct RParam<char> {
    using Type = char;
};

// 对于已经是引用的类型，保持不变
template<typename T>
struct RParam<T&> {
    using Type = T&;
};

// 简化使用的别名模板
template<typename T>
using RParamT = typename RParam<T>::Type;

2.使用示例
template<typename T>
void processData(RParamT<T> data) {
    // 处理数据...
}

// 等同于
// void processData(const BigObject& data);  // 对于大型对象
// void processData(int data);               // 对于int
// void processData(User& data);             // 对于User&


3.性能考虑
小型内置类型(如int、char): 值传递通常比引用传递更高效
大型对象: 常量引用传递避免了不必要的复制
需要修改的对象: 非常量引用传递允许函数修改原始对象
